﻿#pragma once
#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<stdbool.h>
#include<locale.h>

#define KEY_PRESS(VK) (GetAsyncKeyState(VK)&0x1 ?1:0)
#define WALL L'墙'
#define BODY L'蛇'
#define FOOD L'※'
#define POS_X 24
#define POS_Y 5
enum GAME_STATUS
{
	OK = 1,//正常运行
	ESC,//正常退出
	KILL_BY_WALL,//撞墙退出
	KILL_BY_SELF//咬到自己
};
//蛇行走方向
enum DIRECTION
{
	UP=1,
	DOWN,
	LEFT,
	RIGHT
};

typedef struct SnakeNode
{
	int x;
	int y;
	struct SnakeNode* next;
}SnakeNode;

typedef struct Snake
{
	SnakeNode* pSnake;//维护整条蛇的指针
	SnakeNode* pFood;//维护⻝物的指针
	enum DIRECTION Dir;//蛇头的⽅向默认是向右
	enum GAME_STATUS Status;//游戏状态
	int Socre;//当前获得分数
	int FoodWeight;//默认每个⻝物10分
	int SleepTime;//每⾛⼀步休眠时间
}Snake;

//定位控制台光标
void setpos(int x, int y);

void GameStart(Snake* pp);
//打印欢迎信息
void WelcomeToGame();
//绘制地图
void CreateMap();
//初始化蛇
void InitSnake(Snake* pp);
//创建食物
void CreateFood(Snake* pp);
//玩游戏的过程
void GameRun(Snake* pp);
//下一个位置是否为食物
int nextisfood(Snake* pp, SnakeNode* pf);
//下一个位置是食物
void eatfood(Snake* pp, SnakeNode* pf);
//下一位置不是食物
void noeatfood(Snake* pp, SnakeNode* pf);
//检测是否撞墙
void killbywall(Snake* pp);
//检测是否咬到自己
void killbyself(Snake* pp);
//游戏结束的善后工作
void GameEnd(Snake* pp);
